package com.probiz.estore.imports.handler.product;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.probiz.estore.common.model.product.Product;
import com.probiz.estore.common.model.product.ProductAttGroup;
import com.probiz.estore.common.model.product.ProductAttGroupItem;
import com.probiz.estore.common.model.product.ProductType;
import com.probiz.estore.common.model.product.ProductTypeSkuOption;
import com.probiz.estore.common.model.product.SkuOptionValue;
import com.probiz.estore.imports.handler.ColumnHandler;
import com.probiz.estore.imports.handler.basic.ColumnBasicHandler;
import com.probiz.estore.imports.model.Column;
import com.probiz.estore.imports.model.ImportModel;
import com.probiz.estore.product.service.ProductTypeManager;

/**
 * 更新产品时不处理产品类型
 *
 */
public class ProductTypeHandler extends ColumnBasicHandler implements ColumnHandler {
	private Logger logger = Logger.getLogger(ProductTypeHandler.class);
	ProductTypeManager productTypeManager=null;
	
	public void setProductTypeManager(ProductTypeManager productTypeManager) {
		this.productTypeManager = productTypeManager;
	}

	public void setProperty(ImportModel importModel,Column column) throws Exception {
		String value = column.getValue();
		Product product=(Product)importModel.getTarget();
		if(importModel.isUpdate()){
			if(StringUtils.isNotEmpty(value)&&(!product.getProductType().getProductTypeName().equals(value))){
				//当为更新时，产品类型发生变更。
				importModel.setResult(ImportModel.RESULT_ERROR);
				String msg = "本条数据为更新，商品类型不能进行变更！，请在【商品类型】中填写正确的信息。";
				logger.error(msg);
				importModel.setMsg(msg);
			}
			return;
		}else{
			if(StringUtils.isEmpty(value)){
				//设置结果
				importModel.setResult(ImportModel.RESULT_ERROR);
				String msg = "无法新增导入，必须填写【商品类型】";
				logger.error(msg);
				importModel.setMsg(msg);
				return;
			}
			List<ProductType> productTypeList = productTypeManager.listByProperty("productTypeName", value);
			if(0 == productTypeList.size()){
				//设置结果
				importModel.setResult(ImportModel.RESULT_ERROR);
				String msg = "无法新增导入，找到多个商品类型名称均为【"+value+"】的商品类型，系统无法识别";
				logger.error(msg);
				importModel.setMsg(msg);
				return;
			}else if(1 == productTypeList.size()){
				importModel.setResult(ImportModel.RESULT_SUCCESS);
				product.setProductType(productTypeList.get(0));
				//start:获取延迟加载的对象
				if(product.getProductType().getProductAttGroups()!=null){
					product.getProductType().getProductAttGroups().size();
					for(ProductAttGroup group : product.getProductType().getProductAttGroups()){
						group.getProductAttGroupItems().size();
						for(ProductAttGroupItem item: group.getProductAttGroupItems()){
							item.getAttribute().getAttributeName();
						}
					}
				}
				if(product.getProductType().getProductTypeBrands()!=null){
					product.getProductType().getProductTypeBrands().size();
				}
				if(product.getProductType().getProductTypeSkuOptions()!=null){
					product.getProductType().getProductTypeBrands().size();
					for(ProductTypeSkuOption productTypeSkuOption:product.getProductType().getProductTypeSkuOptions()){
						productTypeSkuOption.getSkuOption().getSkuOptionName();
						for(SkuOptionValue skuOptionValue:productTypeSkuOption.getSkuOption().getSkuOptionValues()){
							skuOptionValue.getSkuOptionValueName();
						}
					}
				}
				//end:获取延迟加载的对象
				return;
			}else{
				//设置结果
				importModel.setResult(ImportModel.RESULT_ERROR);
				String msg = "无法新增导入，必须指定【商品类型】";
				logger.error(msg);
				importModel.setMsg(msg);
				return;
			}
			
		}
	}

}
